# 绘制图像
# 目标函数：y = x**3 -2*x + 1
# 绘图的自变量区间：[-10, 10)
# 绘制图形需要连续的值形式还是离散的值形式
# 用固定间隔的点看趋势

# 目标函数: y = 1 / (1 + exp(-x))
# 目标函数：y = (exp(x) - exp(-x)） /  (exp(x) + exp(-x))


import matplotlib.pyplot as plt
import numpy as np
import math

def poly(x):
    """
    自定义多项式函数
    :param x: 输入 的值
    :return: 输入的值
    """
    return x ** 3 - 2 * x + 1

def sigmoid(x):
    """
    计算 sigmoid 函数的值
    :param x: 输入的值
    :return: 输出的值
    """
    # return 1 / (1 + pow(math.e, -x))
    return  1 / (1 + np.exp(-x))

def tanh(x):
    """
    计算 tanh 函数的值
    :param x: 输入的值
    :return: 输出的值
    """
    return (np.exp(x) - np.exp(-x)) / (np.exp(x) + np.exp(-x))


if __name__ == '__main__':

    start = -100
    end = 100

    # step1 将自变量区间进行等分处理，得到目标个数点    假设得到 100 个
    # 方式一、自动手动算步长   (10 - (10)) / 100
    # x = [-10 + 0.2 * i for i in range(100)]
    # 方式二、使用 range  函数
    # x = range(start, end, 1)
    # print(len(x))
    # x = [i / 10 for i in range(start, end, 2)]
    # 方式三、使用 numpy
    x = np.linspace(-10, 10, 100)
    print(x)


    # step2 将每个 x 都带入
    # for i in x:
    #     y = poly(i)
    #     print("x=", i, "y=", y)

    # y = [poly(i) for i in x]
    # print(y)

    # y = poly(x)
    # y = sigmoid(x)
    y = tanh(x)
    print(y)

    #
    plt.plot(x, y)
    plt.show()

